package com.probox.common.entity.service.product;

import java.util.HashMap;
import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.probox.common.core.enums.CategoryDepth;
import com.probox.common.core.enums.DataStatus;
import com.probox.common.entity.domain.product.ProductCategory;
import com.probox.common.entity.domain.product.ProductInfo;
import com.probox.common.entity.domain.product.vo.OptionsSelect;
import com.probox.common.entity.domain.product.vo.ProductCategoryVo;

/**
 * 商品类别Service接口
 *
 *
 * @date 2021-05-26
 */
public interface IProductCategoryService extends IService<ProductCategory> {


    /**
     * 查询商品类别
     *
     * @param categoryUid 商品类别ID
     * @return 商品类别
     */
    public ProductCategory selectProductCategoryById(Long categoryUid);


    /**
     * 查询商品类别列表
     *
     * @param productCategory 商品类别
     * @return 商品类别集合
     */
    public List<ProductCategory> queryList(ProductCategory productCategory);


    /**
     * 新增商品类别
     *
     * @param productCategory 商品类别
     * @return 结果
     */
    public boolean insertProductCategory(ProductCategory productCategory);

    /**
     * 修改商品类别
     *
     * @param productCategory 商品类别
     * @return 结果
     */
    public boolean updateProductCategory(ProductCategory productCategory);

    /**
     * 批量删除商品类别
     *
     * @param categoryUids 需要删除的商品类别ID
     * @return 结果
     */
    public boolean deleteProductCategoryByIds(Long[] categoryUids);

    /**
     * 修改商品类别状态
     *
     * @param productCategory 商品类别
     * @return 结果
     */
    public boolean updateCategoryStatus(ProductCategory productCategory);

    /**
     *  查询该等级的类别
     * @param depth 等级
     * @return
     */
    public List<ProductCategory> getCategoryDepthList(String depth,Long uid);

    /**
     *  查询类别重名
     * @param category
     * @return
     */
    public Integer queryCategoryName(ProductCategory category);

    /**
     *  获取分类的级联
     * @return
     */
    public List<OptionsSelect> selectOptionList();

    /**
     *  获取商品分类的名称
     * @param productInfo 商品信息
     * @return
     */
    public String getCategoryName(ProductInfo productInfo);
    public Integer selectCategoryCount(ProductCategory productCategory);

    /**
     *  api 获取分类下的子级分类,还有相关的商品图片
     * @param categoryUid
     * @return
     */
    public ProductCategoryVo getCategoryVo(Long categoryUid);


    /**
     * 新增商品类别 pdd测试
     *
     * @param productCategory 商品类别
     * @return 结果
     */
    public ProductCategory insertProductCategoryPdd(ProductCategory productCategory);

    /**
     * 查询已经添加过的分类
     * @return
     */
    public HashMap getTestCategory();


    public List<ProductCategory> getCategoryOne(String depth, Long uid);

}
